To find for the intersection of any in a set of classes (not the intersection, but the union), you can give a list to the class_ keyword argument (as of 4.1.2): soup = BeautifulSoup(sdata) class_list = ["stylelistrow"] # can add any other classes to this list. # will find any divs with any names in class_list:
Share, comment, bookmark or report
2. .find_all() will return a list. You need to iterate through that list. Or your other option as suggested is to use .find(). .find() will return the first element, regardless of how many there are in the html. But seeing you want multiple elements, you'll need to also use regex to find all the ones that contain 'og:price:'.
Share, comment, bookmark or report
Short answer: soup.findAll ('p') [0].next. Real answer: You need an invariant reference point from which you can get to your target. You mention in your comment to Haidro's answer that the text you want is not always in the same place. Find a sense in which it is in the same place relative to some element.
Share, comment, bookmark or report
Beautiful Soup 4 supports most CSS selectors with the .select() method, therefore you can use an id selector such as: soup.select('#articlebody') If you need to specify the element's type, you can add a type selector before the id selector: soup.select('div#articlebody')
Share, comment, bookmark or report
Note that if you're using an older version of BeautifulSoup (before version 4) the name of this method is findAll. In version 4, BeautifulSoup's method names were changed to be PEP 8 compliant, so you should use find_allinstead. If you want alltags with an href, you can omit the nameparameter: href_tags = soup.find_all(href=True)
Share, comment, bookmark or report
Thank you for the great tip. Step 3 may vary if the login page request is redirected (status code 30x). In this case, it is too late to see the Network tab after login.
Share, comment, bookmark or report
soup = BeautifulSoup(HTML) # the first argument to find tells it what tag to search for # the second you can pass a dict of attr->value pairs to filter # results that match the first tag table = soup.find("table", {"title":"TheTitle"} ) rows=list() for row in table.findAll("tr"): rows.append(row) # now rows contains each tr in the table (as a BeautifulSoup object) # and you can search them to ...
Share, comment, bookmark or report
try this: li = soup.find("li", {"class" :"test" }) children = li.find_all("a") # returns a list of all <a> children of li. other reminders: The find method only gets the first occurring child element. The find_all method gets all descendant elements and are stored in a list. answered Aug 18, 2014 at 2:21.
Share, comment, bookmark or report
5. soup.select() always returns a list of elements, not just one element. Call get_text() on each element in turn: for element in poem: print element.get_text() If you expected just one element, then extract it with indexing: print poem[0].get_text() answered Oct 24, 2015 at 13:56. Martijn Pieters.
Share, comment, bookmark or report
The 'a' tag in your html does not have any text directly, but it contains a 'h3' tag that has text. This means that text is None, and .find_all() fails to select the tag.
Share, comment, bookmark or report
Comments